package ar.edu.unju.fi.uicomponents.beans;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import ar.edu.unju.fi.model.dao.UsuarioDAO;
import ar.edu.unju.fi.model.dao.impl.UsuarioDAOImpl;
import ar.edu.unju.fi.model.domain.Usuario;

@ManagedBean
@SessionScoped
public class LoginBean {
	
	private Usuario usuario = new Usuario();
	private String nombre ;
	
	/**
	 * @author Fernando
	 * @return Este metodo me valida los datos del login para acceder al sistema; y guarda el usuario valido al FacesContext
	 * @throws Exception
	 */
	public String validarDatos() throws Exception{
		UsuarioDAO usuarioDAO = new UsuarioDAOImpl();
		Usuario usu;
		String resultado=null;
		
		try {
			usu = usuarioDAO.validarUsuario(usuario);
			
			if (usu != null){
				FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("usuario", usu);
				nombre = usu.getNombre();
				
			if(usu.getRol().getRolId()==1){
					resultado = "homeVend"; 
			}else{
				resultado = "homeAdmi";
				}
			}
			
			
		} catch (Exception e) {
			throw e;
		}
	return resultado;
	}
	
	/**
	 * @author Fernando
	 * @return Este metodo devuelve false si el usuario no esta en el FacesContext; devuelve true si existe en el FacesContext
	 */
	public boolean verificarSession(){
			boolean estado;
			
			if (FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("usuario") == null){
				
				estado = false;
				
			}else {
				estado = true;
			} 
			
			
	return estado;
	}
	
	
	
	/**
	 * @author Fernando
	 * @return Este metodo termina la session iniciada en el Login ; nos retorna al index
	 */
	public String cerrarSession(){
		FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
//		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("usuario");
		return "login";
	}
	
	
	/**
	 * @return the usuario
	 */
	public Usuario getUsuario() {
		return usuario;
	}

	/**
	 * @param usuario the usuario to set
	 */
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	/**
	 * @return the nombre
	 */
	public String getNombre() {
		return nombre;
	}

	/**
	 * @param nombre the nombre to set
	 */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	
	
	
	

}
